package vista;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import modelo.Modelo;
import modelo.abstraccionesGeometricas.Punto;
import modelo.funciones.Funcion;


public class VistaDerivada implements ActionListener{
	
	private Funcion f;
	private Modelo modelo;
	private JLabel respuesta;
	
	public VistaDerivada(Modelo modelo) {
		this.modelo=modelo;
	}
	
	public Modelo getModelo(){
		return this.modelo;
	}
	
	public Funcion getFuncion(){
		return this.f;
	}
	
	public void setFuncion(Funcion f){
		this.f=f;
	}
	
	public void run(){
		JFrame frame=new JFrame("Calcular Derivada");
		JPanel panel=new JPanel();
		JLabel label=new JLabel("Ingrese el numero donde desea calcular la derivada");
		JTextField texto=new JTextField(10);
		texto.addActionListener(new OyenteVistaDerivada());
		respuesta=new JLabel();
		panel.add(label);
		panel.add(texto);
		panel.add(respuesta);
		frame.setSize(new Dimension(310,150));
		frame.setResizable(false);
		frame.add(panel);
		frame.setVisible(true);
	}
	
	public void actionPerformed(ActionEvent arg0) {
		BotonObservador boton=(BotonObservador)arg0.getSource();
		try {
			this.setFuncion(this.getModelo().getFunciones().get(this.getModelo().getNombresFunciones().indexOf(boton.getFuncion())));
			this.run();	
		} catch (ArrayIndexOutOfBoundsException e){
			Mensaje mensaje=new Mensaje("No a seleccionado ninguna funcion");
		}
	}
	
	public class OyenteVistaDerivada implements ActionListener{
		
		public void actionPerformed(ActionEvent arg0) {
			JTextField texto=(JTextField)arg0.getSource();
			try {
				int numero=Integer.parseInt(texto.getText());
				Mensaje mensaje= new Mensaje("La derivada en el punto vale "+getFuncion().calcularDerivada(new Punto(numero,0)));
			} catch (NumberFormatException e){
				Mensaje mensaje=new Mensaje("El numero ingresado no es valido");
			}
		}
	}

}
